import { TodoItem } from "../../types/data";
import { TodoAction } from "../../types/store";
interface IState {
  todos: TodoItem[];
  active: TodoItem;
  show: Boolean;
  isEdit:Boolean
}
const initValue: IState = {
  todos: [],
  active: {} as TodoItem,
  show: false,
  isEdit:false
};
export default function todoList(state = initValue, action: TodoAction) {
  switch (action.type) {
    case "TODO_SAVE":
      return {
        ...state,
        todos: action.payload,
      };
    case "TODO_ADD": {
      const newTodo = {
        ...state,
        todos: [...state.todos, action.item],
      };
      localStorage.setItem("todoList", JSON.stringify(newTodo.todos));
      return newTodo;
    }
    case "TODO_DELETE": {
      const newTodo = {
        ...state,
        todos: state.todos.filter((item) => item.id !== action.id),
      };
      localStorage.setItem("todoList", JSON.stringify(newTodo.todos));
      return newTodo;
    }
    case "TODO_EDIT": {
      const newTodo = {
        ...state,
        todos: state.todos.map((item) => {
          if (item.id === action.item.id) {
            return action.item;
          }
          return item;
        }),
      };
      localStorage.setItem("todoList", JSON.stringify(newTodo.todos));
      return newTodo;
    }
    case "TODO_ACTIVE":
      return {
        ...state,
        active: state.todos.find((item) => item.id === action.id)!,
      };
    case "TODO_SHOW":
      return {
        ...state,
        show:!state.show,
        isEdit:action.isEdit
      };
    default:
      return state;
  }
}
